#include <stdio.h>
#include"linkList.h"
#include"chainlist.h"
#include "looplist.h"
#include "doublelist.h"

int main() {
    //头节点链表测试
    LinkList_t* table = createLinkList();
    if (table == NULL) {return -1;}

    for (int i = 0; i < 10; i++) {
        insertLinkListHead(table, 100+i);//头插
    }

    insertLinkListPos(table, 10, 520);//指定位置插入
    deleteLinkListValue(table, 520);//删除元素值

    showLinkList(table);//打印链表

    releaseLinkList(table);//释放链表

printf("------------------------\n");

    //头指针链表测试
    ChainList_t table2;
    initChainList(&table2);//初始化
    for (int i = 0; i < 10; i++) {
        insertChainListHead(&table2, 50+i);//头插
    }
    insertChainListPos(&table2, 0, 520);//指定位置插入
    deleteChainListValue(&table2, 520);//删除元素值

    showChainList(&table2);//打印链表

    destroyChainList(&table2);//释放链表

printf("------------------------\n");

    //头节点循环链表测试
    LoopList_t* table3 = createLoopList();
    if (table3 == NULL) {return -1;}
    //没有元素的头插
    insertLoopListHead(table3, 100);
    //当删除元素是链表中最后一个元素时
    deleteLoopListValue(table3, 100);
    //没有元素的尾插
    insertLoopListTail(table3, 520);

    //有元素的头插和尾插
    insertLoopListHead(table3, 519);
    insertLoopListTail(table3, 521);

    showLoopList(table3);//打印链表

    releaseLoopList(table3);//释放链表

printf("------------------------\n");

   //双链表测试
    Dlist_t *table4=createDlist();
    if (table4 == NULL) {return -1;}
    //头插
    insertDlistHead(table4, 700);
    //尾插
    insertDlistTail(table4, 510);
    //删除
    deleteDlistValue(table4, 700);
    //打印
    showDlist(table4);
    releaseDlist(table4);//释放链表
    return 0;
}